import json
import logging
import os

from src.config import Config
from src.utils.resources_path import resource_path
from src.utils.sql import execute_sql

SQL_SCRIPTS_DIR = resource_path("scripts")


logger = logging.getLogger(__name__)


def load_config(path: str = "config.json") -> Config:
    """加载配置文件"""
    try:
        with open(path, "r", encoding="utf-8") as f:
            config_data = json.load(f)
            config = Config(**config_data)
            logger.info(f"使用配置: {config}")
            return config
    except FileNotFoundError:
        logger.error(f"配置文件 {path} 不存在")
        config = Config()
        with open(path, "w", encoding="utf-8") as f:
            json.dump(config.model_dump(mode="json"), f, ensure_ascii=False, indent=4)
        logger.info(f"已创建默认配置文件 {path}")
        return config
    except json.JSONDecodeError:
        logger.error(f"配置文件 {path} 格式错误")
        raise
    except Exception:
        logger.error(f"加载配置文件 {path} 时发生未知错误")
        raise

def check_config(config: Config):
    os.makedirs(os.path.dirname(config.db_path), exist_ok=True)
    # 执行SQL脚本
    if not os.path.exists(config.db_path):
        for sql_file in os.listdir(SQL_SCRIPTS_DIR):
            if sql_file.endswith(".sql"):
                sql_path = os.path.join(SQL_SCRIPTS_DIR, sql_file)
                execute_sql(config.db_path, sql_path)

    os.makedirs(config.kuaidi_output_dir, exist_ok=True)
    os.makedirs(config.yjtz_output_dir, exist_ok=True)
    os.makedirs(config.wjtz_output_dir, exist_ok=True)
    os.makedirs(os.path.dirname(config.kuaidi_template_path), exist_ok=True)
    os.makedirs(os.path.dirname(config.yjtz_benke_template_path), exist_ok=True)
    os.makedirs(os.path.dirname(config.yjtz_yanjiusheng_template_path), exist_ok=True)
    os.makedirs(os.path.dirname(config.wjtz_benke_template_path), exist_ok=True)
    os.makedirs(os.path.dirname(config.wjtz_shuoshi_template_path), exist_ok=True)
    os.makedirs(os.path.dirname(config.wjtz_boshi_template_path), exist_ok=True)

    failed_msg = []
    if not os.path.exists(config.kuaidi_template_path):
        logger.error(f"快递单模板文件不存在: {config.kuaidi_template_path}")
        failed_msg.append(f"快递单模板文件不存在: {config.kuaidi_template_path}")
    if not os.path.exists(config.yjtz_benke_template_path):
        logger.error(
            f"应届本科毕业生通知单模板文件不存在: {config.yjtz_benke_template_path}"
        )
        failed_msg.append(
            f"应届本科毕业生通知单模板文件不存在: {config.yjtz_benke_template_path}"
        )
    if not os.path.exists(config.yjtz_yanjiusheng_template_path):
        logger.error(
            f"应届硕博毕业生通知单模板文件不存在: {config.yjtz_yanjiusheng_template_path}，请将模板文件放在指定路径，或打开config.json文件配置"
        )
        failed_msg.append(
            f"应届硕博毕业生通知单模板文件不存在: {config.yjtz_yanjiusheng_template_path}"
        )
    if not os.path.exists(config.wjtz_benke_template_path):
        logger.error(
            f"非应届本科毕业生通知单模板文件不存在: {config.wjtz_benke_template_path}，请将模板文件放在指定路径，或打开config.json文件配置"
        )
        failed_msg.append(
            f"非应届本科毕业生通知单模板文件不存在: {config.wjtz_benke_template_path}"
        )
    if not os.path.exists(config.wjtz_shuoshi_template_path):
        logger.error(
            f"非应届硕士毕业生通知单模板文件不存在: {config.wjtz_shuoshi_template_path}，请将模板文件放在指定路径，或打开config.json文件配置"
        )
        failed_msg.append(
            f"非应届硕士毕业生通知单模板文件不存在: {config.wjtz_shuoshi_template_path}"
        )
    if not os.path.exists(config.wjtz_boshi_template_path):
        logger.error(
            f"非应届博士毕业生通知单模板文件不存在: {config.wjtz_boshi_template_path}，请将模板文件放在指定路径，或打开config.json文件配置"
        )
        failed_msg.append(
            f"非应届博士毕业生通知单模板文件不存在: {config.wjtz_boshi_template_path}"
        )
    if not config.sender.name:
        logger.error("寄件人姓名未配置")
        failed_msg.append("寄件人姓名未配置")
    if not config.sender.phone:
        logger.error("寄件人手机号未配置")
        failed_msg.append("寄件人手机号未配置")
    if not config.sender.address:
        logger.error("寄件人地址未配置")
        failed_msg.append("寄件人地址未配置")

    return failed_msg

if __name__ == "__main__":
    config = load_config()
    print(config.db_path)
